package com.project.util;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * @Author(王思翰)
 * @Description(类的描述)
 * @Date(创建时间) 2021/9/9 19:02
 */
public class ImgCompress {
    /**
     * 本地图片转换成base64字符串
     * @param imgFile	图片本地路径
     * @return
     *
     * @author ZHANGJL
     * @dateTime 2018-02-23 14:40:46
     */
    public static String ImageToBase64ByLocal(String imgFile) {// 将图片文件转化为字节数组字符串，并对其进行Base64编码处理


        InputStream in = null;
        byte[] data = null;

        // 读取图片字节数组
        try {
            in = new FileInputStream(imgFile);

            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组Base64编码
        Base64 encoder = new Base64();

//        return URLEncoder.encode(encoder.encodeToString(data));// 返回Base64编码过的字节数组字符串

        return new String(Base64.encodeBase64(data));// 返回Base64编码过的字节数组字符串

    }

    /**
     * base64字符串转换成图片
     * @param imgStr		base64字符串
     * @param imgFilePath	图片存放路径
     * @return
     *
     * @author ZHANGJL
     * @dateTime 2018-02-23 14:42:17
     */
    public static boolean Base64ToImage(String imgStr,String imgFilePath) throws IOException { // 对字节数组字符串进行Base64解码并生成图片
        Base64 decoder = new Base64();
            // Base64解码
//            1.1 URLEncoder.encode(String s, String enc)
//            使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式
//            1.2 URLDecoder.decode(String s, String enc)
//            使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。
//            2. 发送的时候使用URLEncoder.encode编码，接收的时候使用URLDecoder.decode解码，都按指定的编码格式进行编码、解码，可以保证不会出现乱码
//            3. 主要用来http get请求不能传输中文参数问题。http请求是不接受中文参数的。
//            这就需要发送方，将中文参数encode，接收方将参数decode，这样接收方就能收到准确的原始字符串了

//            imgStr= URLDecoder.decode(imgStr);
//            byte[] b=decoder.decode(imgStr);
//            OutputStream out = new FileOutputStream(imgFilePath);
//            out.write(b);
//            out.close();

            byte[] bytes1 = Base64.decodeBase64(imgStr);
            ByteArrayInputStream bais= new ByteArrayInputStream(bytes1);
            BufferedImage bi1= ImageIO.read(bais);
            File file=new File(imgFilePath);
            ImageIO.write(bi1,"jpg",file);
            return true;

    }
}
